From e9a67cc6d03012f3210d36d96dae9227825b0ce6 Mon Sep 17 00:00:00 2001 From: emersion Date: Sun, 23 Sep 2018 20:56:18 +0200 Subject: [PATCH] gdk: seal in-memory files when possible This can be used by compositors to mmap memory without having to handle SIGBUS. --- gdk/wayland/gdkdisplay-wayland.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index 712112b565..7bcf18ca30 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -1207,13 +1207,21 @@ open_shared_memory (void) #if defined (__NR_memfd_create) if (!force_shm_open) { - ret = syscall (__NR_memfd_create, "gdk-wayland", MFD_CLOEXEC); + int options = MFD_CLOEXEC; +#if defined (MFD_ALLOW_SEALING) + options |= MFD_ALLOW_SEALING; +#endif + ret = syscall (__NR_memfd_create, "gdk-wayland", options); /* fall back to shm_open until debian stops shipping 3.16 kernel * See bug 766341 */ if (ret < 0 && errno == ENOSYS) force_shm_open = TRUE; +#if defined (F_ADD_SEALS) && defined (F_SEAL_SHRINK) + if (ret >= 0) + fcntl (ret, F_ADD_SEALS, F_SEAL_SHRINK); +#endif } #endif -- 2.30.2